from service.llm_service import LLM_Service

llm_service = LLM_Service()

# ipo系统提示词
IPO_SYS_PROMPT = """
你是一名证券交易所的业务专家，熟悉国内证券相关的各项业务，拥有丰富的处理上市公司申请书审核问询相关的经验。
你的工作职责是对公司上市申请书内容进行审核，即根据上市申请书的申报材料，向发行人、保荐机构、申报会计师等提出专业的问询问题。现在根据你的专业知识，请帮我完成以下任务。
"""



# 针对ipo生成问询问题树

LAWS_EXTRACTION_SYS_PROMPT = """
你是一名证券交易所的业务专家，熟悉国内证券业务相关各项法律法规，拥有丰富的处理公司上市申请书审核问询相关的经验。
你的工作职责是对公司上市申请书内容进行审核，即根据上市申请书的申报材料，向发行人、保荐机构、申报会计师等提出专业的问询问题。现在根据你的专业知识，请帮助我完成以下任务。
"""

# 根据申报材料，提出问题。
LAWS_EXTRACTION_PROMPT = """
<问询问题>
{question}
</问询问题>
<申报材料类别参考>
{ref_category}
</申报材料类别参考>
<任务>
任务：给你的材料分为两部分内容，一部分是针对申报材料的历史问询标题和问询内容，还有一部分是问询可能对应的类别参考。
所有的问询问题均为涉及相关法律法规的提问，你的职责就是对涉及法律法规的问询进行分类(比如有的法律法规问询是关于实控人，有的法律法规问询是关于主营业务)，总结出每种类型下的问询规则。
要求如下：
	1.针对这类涉及法律法规的问询问题，给出其问询所属的类别，可以使用参考的类别，如果不属于参考的类别，可以给出新的类别。
	2.总结出这类问询，交易所可能会依据法律法规提出的问询规则，这样下次碰到这类的申报材料，可以参考历史问询提炼的问询规则，从而对申报材料进行问询。
请确保提取的问询规则，内容真实，不遗漏，不错乱，问询规则保持一定的归纳性，尽量内容详细且易于理解，问询规则里面要包含依据的法律法规。
注意：归纳总结的问询规则里面一定要包含依据的法律法规名称。比如：
正确的问询规则，指出了依据的法律法规：若存在政府补助，应披露执行《企业会计准则第16号—政府补助》的具体情况，包括计入其他收益或营业外收入的方式区别、分项政府补助具体情况、是否属于与资产或收益相关等。
错误的问询规则，没指出依据的法律法规：若存在政府补助，应披露执行相关补助的具体情况，包括计入其他收益或营业外收入的方式区别、分项政府补助具体情况、是否属于与资产或收益相关等。
比如提取的规则的例子：
    a.发行人应披露实际控制人控制的其他企业、关联方及其控制的公司的主营业务与发行人是否存在替代性、竞争性，是否对发行人构成重大不利影响的同业竞争，并依据《科创板首次公开发行股票注册管理办法（试行）》第六十八条发表明确意见。
    b.如果存在产品合作研发的情况，根据《公开发行证券的公司信息披露内容与格式准则第 57 号——招股说明书》（以下简称《招股说明书格式准则》）第 48 条的规定，披露合作研发的合作协议主要内容、权利义务划分约定及采取的保密措施等。
    c.如果存在申请信息披露豁免的情况，要求保荐机构、发行人律师、申报会计师对上述信息披露及豁免申请是否符合《关于注册制下提高招股说明书信息披露质量的指导意见》《招股说明书格式准则》等相关规则要求进行核查，并发表明确意见。
</任务>
<输出格式>
回复格式为json格式，具体格式为：
{{"类别1":[
    {{"rule":xxxx, "laws":["lawA", "lawB"]}},
    {{"rule":yyyy, "laws:["lawC"]}}
    ]
}}
以下是符合输出格式的例子：
{{
  "1.1 历史沿革": [
    {{
      "rule": "如果历史股权变动涉及高校下属企业出资，需说明相关股权转让是否符合《公司法》《国有资产法》等法律法规规定，并履行了必要程序。",
      "laws": ["《公司法》", "《国有资产法》"]
    }},
    {{
      "rule": "若存在自然人股东代持行为，应结合《公司法》《民法典》相关规定，说明是否存在纠纷或潜在纠纷，并清理情况是否符合《科创板首次公开发行股票注册管理办法（试行）》第十二条及《监管规则适用指引——关于申请首发上市企业股东信息披露》要求。",
      "laws": ["《公司法》", "《民法典》", "《科创板首次公开发行股票注册管理办法（试行）》第十二条", "《监管规则适用指引——关于申请首发上市企业股东信息披露》"]
    }},
    {{
      "rule": "对于历史上员工出资未被认定为股东的情形，需说明是否构成股东超过200人情形，并分析其合法合规性，依据《证券法》《非上市公众公司监督管理办法》等法规进行披露。",
      "laws": ["《证券法》", "《非上市公众公司监督管理办法》"]
    }}
  ],
  "1.2 实际控制人和实控权": [
    {{
      "rule": "如存在多个实际控制人共同控制的情况，需根据《证券期货法律适用意见第17号》第五条，说明一致行动关系的稳定性、分歧解决机制的有效性，并提供充分证据支持实际控制人认定。",
      "laws": ["《证券期货法律适用意见第17号》第五条"]
    }},
    {{
      "rule": "如存在亲属关系且在发行人中担任重要职务的人员，需根据《上市公司收购管理办法》第八十三条判断是否构成推定的一致行动人，并说明其是否共同控制发行人。",
      "laws": ["《上市公司收购管理办法》第八十三条"]
    }}
}}
直接给出json格式的回答，不需要任何其他辅助说明。
</输出格式>
"""

merge_query_prompt_template = """
申报材料所属类型：{ref_category}
------------------------------【问询问题：start】------------------------------
{question}
------------------------------【问询问题：end】--------------------------------
任务：现在给你公司上市某段申报材料的类型，以及根据历史问询文件整理出来的问询规则。
由于整理出来的规则数量较多，可能出现语义重复等现象，现在需要对这些问询问题进行整理，合并掉一些语义重复的问询规则。
要求整理后的问询规则不脱离原始问询规则范围，不偏离具体意思，尽量保证问询规则的完整性、覆盖度，将整理好的问询规则直接输出。 
回复格式为整理好的问询规则，每条问询规则输出为单独一行。
"""

LAWS_MERGE_PROMPT = """
<问询对应申报材料内容所属类型>
{category}
</问询对应申报材料内容所属类型>

<根据涉及到法规的历史问询归纳的问询规则>
{query_rules_about_laws}
</根据涉及到法规的历史问询归纳的问询规则>

<任务>
    任务：给你的材料包括两部分内容，一部分是问询对应申报材料内容所属类型，一部分是根据涉及到法律法规的历史问询提炼的问询规则。
    1. 由于这类问询规则可能存在语义上重复的部分，所以请你对问询规则进行整理去重，确保整理后的问询规则内容真实可靠，不遗漏，不错乱，语言流畅、专业度高，和原始的问询规则相比，保持问询点的完整性。
    2. 整理合并语义相同的问询规则，这样下次碰到这类的申报材料，可以参考历史问询提炼的问询规则，从而对申报材料进行问询。
    3. 整理后的涉及法律法规的问询规则，里面一定要包含依据的法律法规名称。
注意：归纳总结的问询规则里面一定要包含依据的法律法规名称。比如：
正确的问询规则，指出了依据的法律法规：若存在政府补助，应披露执行《企业会计准则第16号—政府补助》的具体情况，包括计入其他收益或营业外收入的方式区别、分项政府补助具体情况、是否属于与资产或收益相关等。
错误的问询规则，没指出依据的法律法规：若存在政府补助，应披露执行相关补助的具体情况，包括计入其他收益或营业外收入的方式区别、分项政府补助具体情况、是否属于与资产或收益相关等。
比如提取的规则的例子：
    a.发行人应披露实际控制人控制的其他企业、关联方及其控制的公司的主营业务与发行人是否存在替代性、竞争性，是否对发行人构成重大不利影响的同业竞争，并依据《科创板首次公开发行股票注册管理办法（试行）》第六十八条发表明确意见。
    b.如果存在产品合作研发的情况，根据《公开发行证券的公司信息披露内容与格式准则第 57 号——招股说明书》（以下简称《招股说明书格式准则》）第 48 条的规定，披露合作研发的合作协议主要内容、权利义务划分约定及采取的保密措施等。
    c.如果存在申请信息披露豁免的情况，要求保荐机构、发行人律师、申报会计师对上述信息披露及豁免申请是否符合《关于注册制下提高招股说明书信息披露质量的指导意见》《招股说明书格式准则》等相关规则要求进行核查，并发表明确意见。
</任务>

<输出格式>
回复格式为json格式，具体格式为：
{{"类别1":[
    {{"rule":xxxx, "laws":["lawA", "lawB"]}},
    {{"rule":yyyy, "laws:["lawC"]}}
    ]
}}
以下是符合输出格式的例子：
{{
  "1.1 历史沿革": [
    {{
      "rule": "如果历史股权变动涉及高校下属企业出资，需说明相关股权转让是否符合《公司法》《国有资产法》等法律法规规定，并履行了必要程序。",
      "laws": ["《公司法》", "《国有资产法》"]
    }},
    {{
      "rule": "若存在自然人股东代持行为，应结合《公司法》《民法典》相关规定，说明是否存在纠纷或潜在纠纷，并清理情况是否符合《科创板首次公开发行股票注册管理办法（试行）》第十二条及《监管规则适用指引——关于申请首发上市企业股东信息披露》要求。",
      "laws": ["《公司法》", "《民法典》", "《科创板首次公开发行股票注册管理办法（试行）》第十二条", "《监管规则适用指引——关于申请首发上市企业股东信息披露》"]
    }},
    {{
      "rule": "对于历史上员工出资未被认定为股东的情形，需说明是否构成股东超过200人情形，并分析其合法合规性，依据《证券法》《非上市公众公司监督管理办法》等法规进行披露。",
      "laws": ["《证券法》", "《非上市公众公司监督管理办法》"]
    }}
  ],
  "1.2 实际控制人和实控权": [
    {{
      "rule": "如存在多个实际控制人共同控制的情况，需根据《证券期货法律适用意见第17号》第五条，说明一致行动关系的稳定性、分歧解决机制的有效性，并提供充分证据支持实际控制人认定。",
      "laws": ["《证券期货法律适用意见第17号》第五条"]
    }},
    {{
      "rule": "如存在亲属关系且在发行人中担任重要职务的人员，需根据《上市公司收购管理办法》第八十三条判断是否构成推定的一致行动人，并说明其是否共同控制发行人。",
      "laws": ["《上市公司收购管理办法》第八十三条"]
    }}
}}
直接给出json格式的回答，不需要任何其他辅助说明。
</输出格式>
"""

# 提取基本类型和问询点的系统提示词
CATEGORY_EXTRACTION_SYS_PROMPT = """
你是一名证券交易所的业务专家，熟悉国内证券相关的各项业务，拥有丰富的处理上市公司申请书审核问询相关的经验。
你的工作职责是对公司上市申请书内容进行审核，即根据上市申请书的申报材料，向发行人、保荐机构、申报会计师等提出专业的问询问题。现在根据你的专业知识，请帮我完成以下任务。
"""

# 提取基本类型和问询点的提示词
CATEGORY_EXTRACTION_PROMPT = """
<历史问询列表>
{history_question}
</历史问询列表>
<任务>
任务：给你的历史问询列表里面，包含两部分内容，一部分是申请上市的公司名称，另一部分是针对该公司上市申请书，交易所提出的问询问题列表。
上市公司的名称以公司名称和问询轮数进行唯一标识，问询问题列表给出的是问询函中列出的问题目录。部分问题标题由于数据清洗原因，可能存在噪音。
你的职责是根据清洗出的历史问询函中的问询问题列表，将问询问题进行分类，然后列出每种类型下的所有问询问题。
要求如下：
    1.针对给出的历史问询问题，总结归纳出这些问询可以分为哪几种类型，每种类型下面交易所可能会提出的哪些相关问询问题。
    2.根据总结出的问询问题类型，以及每种类型下面的问询点，下次碰到企业提交的上市申请书，可以先将申报材料的切片进行分类，然后提出相应的问询。
    3.得到的每种类型下面涉及的问询问题，指的是一类可能问询的事项，不是真的问询规则。比如类型可能为公司基本情况，问询问题可能有：历史沿革、实控人和实控权，董高监等。
请确保提取的问询类型和每种类型下的问询问题，内容真实，不遗漏，不错乱。
注意：给出问询问题的类型，然后每种类型下涉及的相关问询问题，而不是直接给出问询规则。比如：
正确提取的问询类型和问询问题：
    {{
        "业务和技术":[
            "关于核心技术先进性",
            "关于产品与市场地位",
            "关于业务模式",
            "关于客户",
        ]
    }}
错误提取的问询类型和问询问题（每种问询类型下面，对应的应该是涉及的相关问询问题，而不是问询规则）：
    {{
        "业务与技术":[
            "技术来源是否合法，是否存在依赖外部授权或开发合作",
            "核心技术人员是否稳定，是否存在竞业禁止风险",
            "主要产品的市场竞争力、应用领域、客户集中度",
            "毛利率波动原因，成本控制能力和盈利模式可持续性"
        ]
    }}
</任务>
<输出格式>
格式为json格式，具体格式为：
{{
    {{"类型1":[“关于A”,“关于B”, "关于C"]}},
    {{"类型2":[“关于C”, "关于D", "关于E"， “关于F”]}}
    {{"类型3":[“关于G”， “关于H”， “关于I”，“关于J”，“关于K”，“关于L”]}}
}}
</输出格式>
以下是符合输出格式的例子：
{{
    "公司基本情况":["关于历史沿革", "关于实控人和实控权","关于股东","关于股权","关于董高监"],
    "业务和技术"：["关于核心技术先进性","关于产品和市场地位","关于业务模式","关于客户"]
}}
直接给出json格式的回答，不需要任何其他辅助说明。
"""

CATEGORY_MERGE_SYS_PROMPT = """
你是一名证券交易所的业务专家，熟悉国内证券相关的各项业务，拥有丰富的处理上市公司申请书审核问询相关的经验。
你的工作职责是对公司上市申请书内容进行审核，即根据上市申请书的申报材料，向发行人、保荐机构、申报会计师等提出专业的问询问题。现在根据你的专业知识，请帮我完成以下任务。
"""

CATEGORY_MERGE_PROMPT = """
<分类及每种分类下面的问询问题>
{category_and_problem}
</分类及每种分类下面的问询问题>
<任务>
任务：给你的材料是根据公司上市申请时回复交易所的问询函材料，整理出来的问询问题的分类，以及每种分类下涉及的问询问题列表。
提取出来的分类和对应的问询问题列表，由于是从不同批次材料中总结的，所以存在一定的语义重复和分类、问询问题数据不一致的问题，所以需要你对其进行合并去重处理。
    1.针对给定的多份问询类型和相关的问询问题列表，进行整理合并去重，确保整理后的类型及每种类型下的问询问题真实可靠，不遗漏，不错乱，语言流畅，专业度高。
    2.概括出来的类型和每种类型下的问题，应该具有概括性，泛化性强，而不是专门针对某个公司提出的问询问题。比如问询问题“关于实验用猴”，“关于二十一所”，“关于收购京能置业”，这类问题仅适用于特定公司，无通用性，直接删除。
    3.给定你的是一份json格式的内容，首先需要对类型（也就是json的key）进行合并去重，然后是对问询问题进行合并去重，比如：
        对问询类型进行合并去重：费用与财务状况，财务信息与经营数据，资金流水与分红，财务状况与盈利分析，财务状况与会计核算，财务规范与内控等都可以归纳合并为“财务和会计”。
        对问询问题进行合并去重：关于实际控制人认定、关于实际控制人及控制权、关于无实际控制人、关于实控人和实控权，这类问询问题，都可以归纳为“关于实际控制人”
注意：你的任务是对给定的多份【分类与对应的问询问题列表】进行合并、去重、增删改等整理操作，输出一份完整的问询分类和问询问题的json格式文件，每种类型类型下的问询问题尽量不要出现语义重复。
</任务>
<输出格式>
格式为json格式，具体格式为：
{{
    {{"类型1":[“关于A”,“关于B”, "关于C"]}},
    {{"类型2":[“关于C”, "关于D", "关于E"， “关于F”]}}
    {{"类型3":[“关于G”， “关于H”， “关于I”，“关于J”，“关于K”，“关于L”]}}
}}
</输出格式>
以下是符合输出格式的例子：
{{
    "公司基本情况":["关于历史沿革", "关于实控人和实控权","关于股东","关于股权","关于董高监"],
    "业务和技术"：["关于核心技术先进性","关于产品和市场地位","关于业务模式","关于客户"]
}}
直接给出json格式的回答，不需要任何其他辅助说明。
"""

CATEGORY_DROP_DUPLICATE_PROMPT = """
</分类及每种分类下面的问询问题>
{category_and_problem}
</分类及每种分类下面的问询问题>
<任务> 
任务：给你的材料是根据公司上市申请时回复交易所的问询函材料，整理出来的问询问题的分类，以及每种分类下涉及的问询问题列表。
提取出来的分类和对应的问询问题列表，由于是从不同批次材料中总结的，所以存在一定的语义重复，以及问询类型划分不一致的问题，所以需要你对其进行合并去重处理。
    1.由于问询问题分类可能存在分类不合理，或者分类过密的问题，可能需要丢问询的类型（即json的key）进行合并或拆分处理，比如“内控与信息披露”，“特殊事项披露”可以合并为“信息披露”， “收入和成本”“客户和市场”“市场与销售”等可以合并为“销售与市场”等。
    2.根据整理好的问询问题分类，将对应的问询问题列表归入正确的分类里面，然后进行合并去重。问询问题的去重，比如：“关于实控人和实控权”，“关于实际控制人的变更”，“关于实际控制人的认定”，“关于实际控制的大额负债”等都可以合并为“关于实际控制人与实控权”。
    3.问询问题的分类应该尽可能合理，分类之间减少语义重叠问题，问询分类下面的问询问题，也应该进行归纳总结，尽量避免语义重复。下次可能申报材料，就可以定位到问询问题分类，以及涉及的问询问题。
注意：你的任务是对给定问询分类和对应的问询列表进行分类整理、问询问题整理、合并、去重等操作，输出一份完整的问询分类和问询问题的json格式文件。
</任务>
<输出格式>
格式为json格式，具体格式为：
{{
    {{"类型1":[“关于A”,“关于B”, "关于C"]}},
    {{"类型2":[“关于C”, "关于D", "关于E"， “关于F”]}}
    {{"类型3":[“关于G”， “关于H”， “关于I”，“关于J”，“关于K”，“关于L”]}}
}}
</输出格式>
以下是符合输出格式的例子：
{{
    "公司基本情况":["关于历史沿革", "关于实控人和实控权","关于股东","关于股权","关于董高监"],
    "业务和技术"：["关于核心技术先进性","关于产品和市场地位","关于业务模式","关于客户"]
}}
直接给出json格式的回答，不需要任何其他辅助说明。
"""

QUERY_RULE_PROMPT = """
<申报材料>
{material}
</申报材料>

<问询问题>
{question}
</问询问题>

<申报材料类别参考>
{ref_category}
</申报材料类别参考>
<任务>
给你的材料分为三部分内容，一部分是上市申请书的申报材料，一部分是针对申报材料的问询标题和内容，还有一部分是申报材料可能对应的类别参考。
你的任务是分析给定的上市申请书的申报材料及对应的历史问询函的内容，完成以下四个步骤：
1.给出涉及的问询类别。根据提供的【申报材料类别参考】，给出与当前申报材料相关度高的问询规则类别，问询规则类别精确到【申报材料类别参考】的二级类别（即json格式类别参考的所有values列表），对于相关度低的类别不予考虑。
2.提取问询规则。总结针对该类申报材料的历史问询内容，提炼出交易所可能提出的典型问询规则。这些规则应具有归纳性、专业性和泛化性，便于后续应用到新的申报材料的智能问询。
3.按照类型组织问询规则。如果从申报材料中可以提取出多个类型的问询规则，请按照不同的类型进行分组，并在每个类型下列出对应的问询规则。
4.保证规则质量。每条问询规则应该基于实际问询内容进行提炼，信息真实完整，表述清晰明确，逻辑严谨，不错乱，不遗漏关键问询点，专业度高，具备一定的归纳性和泛化性。
4.适当合并部分规则。可以适当合并部分问询规则，将多个问询点归纳到一条问询规则，防止规则过于碎片化。

问询规则示例：
- 当发行人综合毛利率出现大幅下降（如同比下降超过10个百分点）时，需结合原材料价格、人工成本、产能利用率、产品结构变动等因素，量化分析毛利率下滑的具体原因，并说明相关影响因素是否具有持续性。
- 需披露报告期内存货跌价准备转回或转销的具体情况，包括涉及的存货类别、金额、转回/转销条件及对公司当期损益的影响，说明是否存在利用存货跌价跨期调节利润的情形。
- 若募投项目涉及新产品线建设或产能扩张，需披露项目的实施背景、技术积累、建设周期、资金使用计划及预期达产时间，并分析新增产能的消化能力及市场匹配度
</任务>
<输出格式>
格式为json格式，具体格式为：
{{
    {{"类型1":[“规则A”,“规则B”, "规则C"]}},
    {{"类型2":[“规则”, "规则D", "规则E"， “规则F”]}}
    {{"类型3":[“规则”， “规则H”， “规则I”，“规则J”，“规则K”，“规则L”]}}
}}
其中类型必须来自【申报材料类别参考】中的二级分类，规则为一条完整的问询要点描述。以下是符合输出格式的例子：
{{
    "关于主要客户与客户集中度":[
        "当发行人客户集中度较高（如前五大客户合计销售占比超过80%）时，需说明客户集中的合理性、客户稳定性及业务持续性，并分析是否存在重大不确定性风险及其对发行人经营的影响。",
        "对于主要客户的获取方式、合作时间、产品认证情况、采购比例等信息需详细披露，并结合认证周期说明新客户拓展情况；同时说明销售金额变动原因、终端使用情况及与客户产品销量的匹配关系。",
        "若主要客户关联方或产业资本入股发行人，需说明入股背景、主要约定内容、入股定价依据及其公允性、相关销售价格与市场价格的比较情况，以及是否存在利益输送或其他安排。",
    ],
    "关于核心技术能力":[
        "若发行人声称具备较为完整的制造体系，但存在较高比例外协加工，需说明外协加工是否涉及关键生产步骤或核心技术，以及该部分外协加工对产品性能的影响。",
        "当发行人技术能力需匹配下游设备迭代更新节奏时，应提供客观依据证明其技术能力和持续创新能力能够支撑未来设备升级需求。",
    ]
}}
直接给出json格式的回答，不需要任何其他辅助说明。
</输出格式>
"""

# 规则生成问询文件
QUERY_RULE_PROMPT_BAK = """
<申报材料>
{material}
</申报材料>

<问询问题>
{question}
</问询问题>

<申报材料类别参考>
{ref_category}
</申报材料类别参考>
<任务>
任务：给你的材料分为三部分内容，一部分是上市申请书的申报材料，一部分是针对申报材料的问询标题和内容，还有一部分是申报材料可能对应的类别参考。你的任务是：
	1.针对这类申报材料和问询问题，给出申报材料的类别，申报类别根据给出的【申报材料类别参考】来判定，类别精确到【申报材料类别参考】的二级类别，即json格式类别参考的所有values列表。
	2.总结出针对这类申报材料，交易所可能会提出的问询规则，这样下次碰到这类的申报材料，可以参考历史问询提炼的问询规则，从而对申报材料进行问询。
	3.根据给定材料可能会提取出多种类型的问询规则，那么给出每种类型下面对应的问询规则。
	4.申报材料分类时尽可能准确，将其分到相关度较高的类别中，对于相关度较中低的类别不予考虑。提取的问询规则，问询内容应该尽可能完整，可以将适当多个要问询的点归纳到一条问询规则，以免规则过于零碎。
请确保提取的问询规则，内容真实，不遗漏，不错乱，专业度高，问询规则保持一定的归纳性，尽量内容详细且易于理解。
比如提取的规则的例子：
    a.当发行人主要生产产品收入及毛利率出现下滑，且占主营业务比例下降时，需披露该产品对应的细分市场规模、境内外竞争格局、主要参与者及未来发展趋势。
    b.若发行人拟拓展新业务领域（如模组装配）并将其纳入募投项目，需披露该业务的具体实施计划、技术积累、客户储备及当前进展。
    c.对于毛利率大幅为负的业务板块（如医疗设备零部件），需详细说明其成本结构，定价策略，市场竞争状况、亏损原因及持续经营的可行性
</任务>
<输出格式>
格式为json格式，具体格式为：
{{
    {{"类型1":[“规则A”,“规则B”, "规则C"]}},
    {{"类型2":[“规则”, "规则D", "规则E"， “规则F”]}}
    {{"类型3":[“规则”， “规则H”， “规则I”，“规则J”，“规则K”，“规则L”]}}
}}
以下是符合输出格式的例子：
{{
    "关于主要客户与客户集中度":[
        "当发行人客户集中度较高（如前五大客户合计销售占比超过80%）时，需说明客户集中的合理性、客户稳定性及业务持续性，并分析是否存在重大不确定性风险及其对发行人经营的影响。",
        "对于主要客户的获取方式、合作时间、产品认证情况、采购比例等信息需详细披露，并结合认证周期说明新客户拓展情况；同时说明销售金额变动原因、终端使用情况及与客户产品销量的匹配关系。",
        "若主要客户关联方或产业资本入股发行人，需说明入股背景、主要约定内容、入股定价依据及其公允性、相关销售价格与市场价格的比较情况，以及是否存在利益输送或其他安排。",
    ],
    "关于核心技术能力":[
        "若发行人声称具备较为完整的制造体系，但存在较高比例外协加工，需说明外协加工是否涉及关键生产步骤或核心技术，以及该部分外协加工对产品性能的影响。",
        "当发行人技术能力需匹配下游设备迭代更新节奏时，应提供客观依据证明其技术能力和持续创新能力能够支撑未来设备升级需求。",
    ]
}}
直接给出json格式的回答，不需要任何其他辅助说明。
</输出格式>
"""

# 根据material得到涉及的规则类型
LLM_MATERIAL_TO_CATEGORY_PROMPT = """
<申报材料>
{material}
</申报材料>

<参考规则>
{rules}
</参考规则>

<任务>
任务：给你的材料包含两部分内容，一部分公司上市申请书中的申报材料片段，一部分是根据交易所历史问询函里面提炼的问询规则。
由于问询规则实在是内容过长，所以对于每种规则类型，仅随机挑选了若干条规则。
你的任务是，针对提供的申报材料片段，参考规则，给出证券交易所针对申报材料，可能会提出哪种类型的问询。
（即返回【参考规则】里面的规则类型, 也就是json格式【参考规则】里面key）

要求：
    1.返回的是涉及的规则的类型，而不是具体的规则。比如关于历史沿革，关于核心技术能力。
    2.所有的规则类型，必须全部出自【参考规则】json里面的key，可能返回多种规则类型，用半角逗号（,）隔开。
</任务>
<输出格式>
直接输出申报材料可能涉及的规则类型，不需要任何辅助说明。请按照以下格式输出：
输出单个类型：类型1
输出多个类型：类型1,类型2,类型3
以下是符合输出格式的输出例子：
例子1：关于实际控制人与实控权
例子2：关于产品与市场地位,关于主要客户与客户集中度,关于市场竞争力与占有率,关于营业收入与增长
</输出格式>
"""

# 根据规则进行问询
LLM_INQUIRY_BY_RULES_PROMPT = """
<申报材料>
{material}
</申报材料>

<涉及问询规则类别，规则详情，规则匹配度分数据>
{match_rules}
</涉及问询规则类别，规则详情，规则匹配度分数据>

<任务>
任务：
给你的材料分为2部分：
1.<申报材料>标签里面的内容是公司上市申请书的申报材料的切片；
2.<涉及问询规则类别，规则详情，规则匹配度分数据>表里面的内容，包括交易所问询时判断申报材料可能涉及该种类型的问询规则，从交易所公布的历史问询函中提炼的该种类型对应的问询规则列表，问询规则与申报材料匹配的相关度分数。
你的任务是根据申报材料的切片，所涉及的问询规则类型，以及从历史问询函中提炼的问询规则列表，以交易所的身份对上市申请书的申报材料提出问询,只输出“请发行人人说明/披露”的内容。
要求：
    1.结合申报材料片段，匹配到的问询规则与规则相关度分数，根据问询规则对上市申请书的申报材料进行问询。
    2.要求提出的问询材料语言表达精准，问询内容专业，信息真实完整，逻辑严谨，不遗漏关键问询点。
    3.问询可能涉及到多条问询规则，可以将多条问询规则集中到一条问询内容中进行提问，避免问询内容过于碎片化。
    4.生成的问询内容，最好不要超过7条，并且每条问询内容之间，问询点尽量不要出现内容交叉、重复等现象。
    5.问询内容应该和申报材料高度匹配，不应该虚构数据事实，比如虚构公司所在行业、业务产品、财务信息、董高监、相关技术等信息，以下是几个问询内容虚构事实的例子：
        1) 申报材料提到公司的产品，问询却要求“披露B端和C端业务在各季度的收入确认金额及占比”，“B端和C端业务”在申报材料中并未提及，此处问询虚构了公司销售业务。
        2）公司为新能源汽车行业，产品定位为汽车零部件的某类产品核心供应商，但是问询内容涉及“CMOS工艺”，问询新能源汽车行业的内容，错误地提到了半导体行业的技术。
    6.申报材料已经明显说明的内容，不需要问询，即去除无效提问。比如：申报材料提到“陆浩东合计控制公司85.27%的股份，为公司实际控制人”，问询内容“请发行人说明实际控制人陆浩东的认定依据”。这里控股已经达到85.27%，属于绝对大股东，问询内容为实控人的判定依据属于无效提问。
</任务>
<输出格式>
直接输出json格式的数据，不需要任何辅助信息。
json格式相关字段说明：
    inquiry：根据问询规则提出的问询内容,问询内容带有标号，且最多不超过7条，每条问询内容中间输出换行。
    rules_ref: 生成问询内容所参考的问询规则列表，规则来自于<涉及问询规则类别，规则详情，规则匹配度分数据>标签里的具体规则内容。
注意：1.由于要严格按照json格式输出，内容部分如果有双引号，请使用全角中文的双引号“”。
     2.rules_ref对应的内容格式为列表，inquiry里面对应的内容为字符串。
请按照以下格式输出：
{{
    "rules_ref" : ["规则A", "规则B", "规则C", "规则D"],
    "inquiry": "(1)xxx; (2)xxx; (3)xxx; (4)xxx; (5)xxx; (6)xxx;(7)xxx。"
}}
输出例子：
{{
    "rules_ref" : ["需量化分析‘两票制’全面实施后对发行人销售费用率、应收账款周转天数、税负水平及回款效率等关键财务指标的影响，并说明业务模式可能发生的结构性变化。", "针对一致性评价、带量采购、‘两票制’等行业政策变动，需按重要性原则进行系统性风险揭示，并在重大事项提示中充分披露其对发行人产品结构、收入稳定性及募投项目实施可能造成的实质性影响。"],
    "inquiry": "(1)请结合公司2022年末应收账款账面价值大幅增长的具体背景，补充量化分析“两票制”等现行行业政策对销售费用率、应收账款周转天数的具体影响，说明验收周期延长是否与行业政策变动存在关联性；(2)请披露报告期内各类销售模式下应收账款周转率、账龄分布及回款效率变化趋势，结合“带量采购”等政策实施节点说明是否已导致客户结算方式或业务模式发生结构性调整，并在重大事项提示中补充行业政策变化对收入稳定性及坏账风险的专项风险提示。"
}}
</输出格式>
"""

# 计算规则与声明材料之间的匹配度
CALCULATE_RULE_MATCH_SCORE = """
<申报材料>
{material}
</申报材料>

<涉及问询规则类别参考>
{category_ref}
</涉及问询规则类别参考>

<问询规则>
{rules_dict}
</问询规则>

给你的材料分为两部分：
1.第一部分<申报材料>里面的内容为公司上市申请书的申报材料的切片。
2.第二部分<涉及问询规则类别参考>里面的内容为申报材料可能涉及问询规则的类别参考，即交易所问询时可能判断申报材料涉及该种类型的问询问题。
2.第三部分<问询规则>里面的内容为根据申报材料切片，所涉及的问询规则字典，字典的key为规则编号，字典的value为对应的规则。
<任务>
问询规则是从交易所公布的历史问询函中，针对规则类型提炼出来的。
现在你的任务，是逐条规则给出，该规则与申报材料切片的相关度分数，对于相关度高的规则，交易所将根据规则对上市申请书的申报材料进行问询。
再次确认：你的任务是给出每条问询规则与申报材料切片的相关度分数，相关度分数分布在0-1区间。
</任务>
<输出格式>
注意：必须返回纯JSON格式，不要包含任何文本、注释或者解释。JSON键必须是字符串格式的<问询规则>里面的规则ID，值必须是0-1之间的浮点数。
{{
 "index1": score1,
 "index2": score2,
 "index3": score3
}}
以下为正确的输出例子：
{{
"0", 0.3,
"1": 0.5,
"2": 0.9
}}

以下为错误的输出例子，因为不符合json格式：
{{
"261": 0.7,
"273": 0.2,
"其他规则均为0"
}}

</输出格式>
"""

# 问询概率预测
INQUIRY_PROBABILITY_PROMPT = """
<申报材料>
{material}
</申报材料>

<问询规则参考>
{rules}
</问询规则参考>

<任务>
</任务>

<输出格式>
<输出格式>
"""

